{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The problem in a nutshell:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import sys\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "import scipy.stats\n",
    "import random\n",
    "import tqdm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "PROJECT_ROOT = os.path.normpath(os.path.join(sys.path[0], '..'))\n",
    "DATA_DIR = os.path.join(PROJECT_ROOT, 'data')\n",
    "\n",
    "def list_absolute(directory):\n",
    "    return sorted([\n",
    "        os.path.join(directory, name)\n",
    "        for name in os.listdir(directory)\n",
    "    ])\n",
    "\n",
    "def load_data(kind):\n",
    "    data_dir = os.path.join(PROJECT_ROOT, 'data', 'processed', kind)\n",
    "    Xs = np.concatenate([\n",
    "        np.load(file) for file in list_absolute(os.path.join(data_dir, 'X'))\n",
    "    ])\n",
    "    Ys = np.concatenate([\n",
    "        np.load(file) for file in list_absolute(os.path.join(data_dir, 'Y'))\n",
    "    ])\n",
    "    \n",
    "    return (Xs, Ys)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "(Xs_train, Ys_train) = load_data('train')\n",
    "(Xs_test, Ys_test) = load_data('test')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.distplot(Ys_train, label='Train')\n",
    "sns.distplot(Ys_test, label='Test')\n",
    "sns.distplot(np.concatenate([Ys_train, Ys_test]), label='Combined')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If that plot doesn't convince you, there's also a proper statistical test.\n",
    "\n",
    "What is the probability those two were drawn sets were drawn from the same distribution (they kinda were) and are that different by random sampling variability alone?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Ks_2sampResult(statistic=0.3004359667812574, pvalue=0.0)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scipy.stats.ks_2samp(Ys_train, Ys_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note the $p$ value that gets rounded down to zero."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "TEST_FRACTION = 0.2\n",
    "\n",
    "basenames = os.listdir(os.path.join(DATA_DIR, 'interim', 'X'))\n",
    "num_test = int(len(basenames) * TEST_FRACTION)\n",
    "num_train = len(basenames) - num_test\n",
    "labels = ['test'] * num_test + ['train'] * num_train\n",
    "\n",
    "test_means, train_means = [], []\n",
    "\n",
    "for i in range(100):\n",
    "    random.shuffle(basenames)\n",
    "\n",
    "    Ys_clustered = {\n",
    "        'train': [],\n",
    "        'test': []\n",
    "    }\n",
    "\n",
    "    for (kind, file) in zip(labels, basenames):\n",
    "        Ys_original = np.load(os.path.join(DATA_DIR, 'interim', 'Y', file))\n",
    "        Ys_clustered[kind].append(list(Ys_original))\n",
    "\n",
    "    train_dist = np.array(sum(Ys_clustered['train'], []))\n",
    "    test_dist = np.array(sum(Ys_clustered['test'], []))\n",
    "\n",
    "    train_means.append(train_dist.mean())\n",
    "    test_means.append(test_dist.mean())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/lib64/python3.7/site-packages/scipy/stats/stats.py:1713: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.\n",
      "  return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.distplot(test_means, label='Test means')\n",
    "sns.distplot(train_means, label='Train means')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "596.2945690336554"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.abs(np.array(test_means) - np.array(train_means)).mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1516.8858456734379"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Ys_train.mean() - Ys_test.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "99"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sum(np.abs(np.array(test_means) - np.array(train_means)) < (Ys_train.mean() - Ys_test.mean()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "def js_distance(P, Q):\n",
    "    overall_min = min(P.min(), Q.min())\n",
    "    overall_max = max(P.max(), Q.max())\n",
    "    kP = scipy.stats.gaussian_kde(P)\n",
    "    kQ = scipy.stats.gaussian_kde(Q)\n",
    "    xs = np.linspace(overall_min, overall_max, 100)\n",
    "    Psmooth = kP(xs)\n",
    "    Qsmooth = kQ(xs)\n",
    "    Msmooth = (Psmooth + Qsmooth) / 2\n",
    "    return 0.5 * (scipy.stats.entropy(Psmooth, Msmooth) + scipy.stats.entropy(Qsmooth, Msmooth))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.10986693208679567"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "js_distance(Ys_test, Ys_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 100/100 [02:06<00:00,  1.09s/it]\n"
     ]
    }
   ],
   "source": [
    "TEST_FRACTION = 0.2\n",
    "\n",
    "basenames = os.listdir(os.path.join(DATA_DIR, 'interim', 'X'))\n",
    "num_test = int(len(basenames) * TEST_FRACTION)\n",
    "num_train = len(basenames) - num_test\n",
    "labels = ['test'] * num_test + ['train'] * num_train\n",
    "\n",
    "distances = []\n",
    "\n",
    "for i in tqdm.trange(100):\n",
    "    random.shuffle(basenames)\n",
    "\n",
    "    Ys_clustered = {\n",
    "        'train': [],\n",
    "        'test': []\n",
    "    }\n",
    "\n",
    "    for (kind, file) in zip(labels, basenames):\n",
    "        Ys_original = np.load(os.path.join(DATA_DIR, 'interim', 'Y', file))\n",
    "        Ys_clustered[kind].append(list(Ys_original))\n",
    "\n",
    "    train_dist = np.array(sum(Ys_clustered['train'], []))\n",
    "    test_dist = np.array(sum(Ys_clustered['test'], []))\n",
    "    \n",
    "    distances.append((js_distance(train_dist, test_dist), basenames))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/lib64/python3.7/site-packages/scipy/stats/stats.py:1713: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.\n",
      "  return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD8CAYAAABn919SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3Xt83FWd//HXZ3K/NpdO0pA0Ta8p5dIW0gughZY7osCKwqKAinZdZXVXRWTdddWfuw9vK7qKuFUuFSyXRVm8scqtQEtvKS2lF9om6S1tmmvTJs09c35/zFRiSMkkmclMJu/n4zGPzHzn+515N518cnK+53uOOecQEZGxzxPpACIiEhoq6CIiMUIFXUQkRqigi4jECBV0EZEYoYIuIhIjgi7oZhZnZlvM7PeBxw+b2T4z2xq4zQtfTBERGUz8EPb9PLALyOyz7S7n3FOhjSQiIsMRVAvdzIqA9wG/CG8cEREZrmBb6D8Evgxk9Nv+72b2NeAF4CvOuc7+B5rZcmA5QFpa2vmzZ88eQVwRkfFn8+bNDc4572D72WCX/pvZtcA1zrnPmNklwJecc9eaWQFwFEgEVgCVzrlvvttrlZWVufLy8mD/DSIiApjZZudc2WD7BdPlchHwATPbDzwOLDOzR51zNc6vE3gIWDiixCIiMiKDFnTn3D3OuSLnXAlwM/Cic+6jgRY6ZmbA9cD2sCYVEZF3NZRRLv39ysy8gAFbgU+HJpKIiAzHkAq6c241sDpwf1kY8oiIyDDpSlERkRihgi4iEiNU0EVEYoQKuohIjFBBFxGJESMZtigjsGrDwbC87i2LisPyuiIS/dRCFxGJESroIiIxQgVdRCRGqKCLiMQIFXQRkRihgi4iEiNU0EVEYoQKuohIjFBBFxGJEUEXdDOLM7MtZvb7wOOpZrbBzPaa2RNmlhi+mCIiMpihtNA/D+zq8/g7wL3OuZnAMeCOUAYTEZGhCaqgm1kR8D7gF4HHBiwDngrsshL/uqIiIhIhwbbQfwh8GfAFHucCzc65nsDjaqAwxNlERGQIBi3oZnYtUOec29x38wC7utMcv9zMys2svL6+fpgxRURkMMG00C8CPmBm+4HH8Xe1/BDIMrNT0+8WAUcGOtg5t8I5V+acK/N6vSGILCIiAxm0oDvn7nHOFTnnSoCbgRedcx8BXgJuDOx2O/BM2FKKiMigRjIO/W7gC2ZWgb9P/YHQRBIRkeEY0opFzrnVwOrA/SpgYegjiYjIcOhKURGRGKGCLiISI1TQRURihAq6iEiMUEEXEYkRKugiIjFCBV1EJEaooIuIxAgVdBGRGKGCLiISI1TQRURihAq6iEiMUEEXEYkRKugiIjFCBV1EJEaooIuIxIhgFolONrONZvaGme0ws28Etj9sZvvMbGvgNi/8cUVE5HSCWbGoE1jmnGs1swRgjZk9G3juLufcU+GLJyIiwRq0oDvnHNAaeJgQuLlwhhIRkaELqg/dzOLMbCtQBzznnNsQeOrfzWybmd1rZkmnOXa5mZWbWXl9fX2IYouISH9BFXTnXK9zbh5QBCw0s7OBe4DZwAIgB7j7NMeucM6VOefKvF5viGKLiEh/Qxrl4pxrBlYDVznnapxfJ/AQsDAM+UREJEjBjHLxmllW4H4KcBnwlpkVBLYZcD2wPZxBRUTk3QUzyqUAWGlmcfh/ATzpnPu9mb1oZl7AgK3Ap8OYU0REBhHMKJdtwPwBti8LSyIRERkWXSkqIhIjVNBFRGKECrqISIxQQRcRiREq6CIiMUIFXUQkRqigi4jECBV0EZEYoYIuIhIjVNBFRGKECrqISIxQQRcRiREq6CIiMUIFXUQkRqigi4jEiGBWLEo2s41m9oaZ7TCzbwS2TzWzDWa218yeMLPE8McVEZHTCaaF3gksc87NBeYBV5nZYuA7wL3OuZnAMeCO8MUUEZHBDFrQAwtBtwYeJgRuDlgGPBXYvhL/uqIiIhIhQfWhm1mcmW0F6oDngEqg2TnXE9ilGig8zbHLzazczMrr6+tDkVlERAYQVEF3zvU65+YBRcBC4MyBdjvNsSucc2XOuTKv1zv8pCIi8q6GNMrFOdcMrAYWA1lmdmqR6SLgSGijiYjIUAQzysVrZlmB+ynAZcAu4CXgxsButwPPhCukiIgMLn7wXSgAVppZHP5fAE86535vZjuBx83sW8AW4IEw5hQRkUEMWtCdc9uA+QNsr8Lfny4iIlFAV4qKiMQIFXQRkRihgi4iEiOCOSkqUcbnHDXHO6g+1sakzGQm56TiMYt0LBGJMBX0McQ5x5qKBl58q47OHt9ftmcmx7Nwag6XlOZFMJ2IRJoK+hjR63M8s/Uw5QeOUZqfwbzJWRRmp1B9rJ03DjXz/K46qo+1c/38QtKT9N8qMh7pJ38M8DnHo+sPsLu2haWlXi49M/8vXSwT05OYNzmL9VWN/H7bET7409f41acWMTE9KcKpRWS06aToGLCuspHdtS1ce24Bl8+ZNGB/+eJpuXzswqnsbzzJnatep6fXN8AriUgsU0GPcnUtHfxpx1FmT8rggmm577rvjLx0/uOGc1hf1cS3n31rlBKKSLRQl0sU6/U5ntpcTUKchxvmF2JBjGT54PlFbKtu5hdr9jF3chbvn3vGKCQVkWigFnoUe/3gMaqPtXPdvDPISE4I+rh/uXYO84uz+Noz22k62RXGhCISTVTQo1Svz/HynnoKs1I4p3DCkI5NiPPw7b85l5aOHv7jj7vClFBEoo0KepTaVt1M08kulpbmBdXV0l/ppAyWL5nGU5urWVfZGIaEIhJtVNCjkM85Vu+pZ1JmMrMLMob9Ov+wbCbFOal89X/fpFujXkRingp6FNp55AT1LZ1cXOod0SX9KYlx/Nv751BVf5LHNh4MYUIRiUbBrFg02cxeMrNdZrbDzD4f2P51MztsZlsDt2vCH3d8WFvRQG5a4pD7zgeybHYei6bm8KPn99La2TP4ASIyZgXTQu8BvuicOxP/WqKfNbM5gefudc7NC9z+GLaU40h9SycHmtpYUJITkgm3zIx7rjmTxpNdrHilKgQJRSRaDVrQnXM1zrnXA/db8K8nWhjuYOPV5gPH8BjMK84K2WvOm5zF+84p4OevVFF3oiNkrysi0WVIfehmVoJ/OboNgU13mtk2M3vQzLJPc8xyMys3s/L6+voRhY11vT7HloPHmJWfQeYQxp0H464rS+nq9fHT1ZUhfV0RiR5BF3QzSwd+Dfyjc+4EcD8wHZgH1AD/OdBxzrkVzrky51yZ1+sNQeTYtbe2hZbOHsqmDPi7cURKJqbxwfMKWbXxILVqpYvEpKAKupkl4C/mv3LO/QbAOVfrnOt1zvmAn6MFo0ds88FjpCXGUTopMyyvf+fSmfT6HPerlS4Sk4IZ5WLAA8Au59wP+mwv6LPbDcD20McbP9o6e9hVc4J5k7OI84Rn9aHi3FS10kViWDAt9IuAW4Fl/YYoftfM3jSzbcBS4J/CGTTW7Trags/B3MmhOxk6ELXSRWLXoLMtOufWAAM1GTVMMYR2HDlOVkoChVkpYX2fvq30v79kOvmZyWF9PxEZPbpSNAp0dveyt66Vs87IHNa8LUOlVrpIbFJBjwJv1bbQ63PMOWPkV4YGQ33pIrFJBT0K7DhygvSkeKbkpo7ae6qVLhJ7VNAjrLvXx56jLcwpyAzJpf7BUitdJPaooEfY3tpWunp9nFUYnrHn70atdJHYooIeYW8dPUFSvIdpE9NH/b3VSheJLSroEeScY09tCzPz0sN2MdFg1EoXiR0q6BF09EQHJzp6mJU//FWJRupUK/2xjQc1E6PIGKeCHkF7jrYARLSgg7+V3uNz3P+yWukiY5kKegTtrm2lYEIymSmhnSp3qP7Sl75BrXSRsUwFPUI6uns52HQy4q3zU9RKFxn7Bp3LRcJjb10rPhf67pZVG4a/GPS8yVk8su4A+ZnJAy6wccui4pFEE5EwUws9QvbUtpCc4KE4Z/SuDh3M0tI8fM7xyh6tLCUyFqmgR4Bzjr21LczwRm644kBy0hKZX5zNxn1NNLd1RTqOiAyRCnoEVNaf5ERHDzPyoqP/vK9LZ+cB8NzO2ggnEZGhCmbFoslm9pKZ7TKzHWb2+cD2HDN7zsz2Br6GfiHMGLW2ogGAGXmjf3XoYLJSE7lwei5bDzVzpLk90nFEZAiCaaH3AF90zp0JLAY+a2ZzgK8ALzjnZgIvBB5LENZUNJCdmkBOWmKkowzo4ll5pCTG8ez2GpxzkY4jIkEatKA752qcc68H7rcAu4BC4DpgZWC3lcD14QoZS3p6fayvbIzK1vkpKYlxLC3No7L+JHtqWyIdR0SCNKQ+dDMrAeYDG4B851wN+Is+kHeaY5abWbmZldfXa/TEm4eP09LZw3Rv9BZ0gEXTcpiYnsTvttXQ3euLdBwRCULQBd3M0oFfA//onDsR7HHOuRXOuTLnXJnX6x1Oxphyqv98WpQX9HiPh/fPLaDpZBev7m2IdBwRCUJQBd3MEvAX8185534T2FxrZgWB5wuAuvBEjC1rKhqYU5BJelL0X9M1My+DswsnsHp3HcdOahijSLQLZpSLAQ8Au5xzP+jz1G+B2wP3bweeCX282NLe1cvrB5p5z8yJkY4StPedU4DHjN9tO6ITpCJRLpgW+kXArcAyM9sauF0DfBu43Mz2ApcHHsu72LS/ia5eHxdOz410lKBNSEngsjn5vHW0hae3HI50HBF5F4P+3e+cWwOc7nLGS0MbJ7atr2ok3mMsKMnhma1HIh0naBdOz2XH4eN8/bc7uGjGRPIzkyMdSUQGoCtFR9G6qkbOLZpA2hjoP+/LY8YHzy+iq9fHPb95U10vIlFKBX2UnOzsYVv1cS4YQ90tfU1MT+LLV87mxbfqeGT9gUjHEZEBqKCPkk37m+j1ORZPG5sFHeBjF5awtNTLt36/izerj0c6joj0o4I+StZXNZEQZ5w/ZexOeePxGD/48DwmpifymVWbOd7eHelIItKHCvooWVfVyNyiLFITx1b/eX/ZaYn85CPnUdPcwecf30KPriIViRoq6KOgpaOb7YePj+nulr7OK87mm9edzerd9Xzjdzt1klQkSozt5uIYUX7gGL0+N2ZPiA7klkXFHGg8yX+/UsWU3FQ++d5pkY4kMu6poI+C9ZWNJMQZ5xWP3f7zgdx91WwONrXxrT/sIis1kRvPL4p0JJFxTQV9FKyvamT+5GxSEuMiHSWkPB7j3pvm0dpZzpefeoOEOOO6eYWRjiUybqkPPcxOdHTz5uHjLJ6WE+koYZGcEMeKW8tYUJLDF558g2e2anoAkUhRQQ+z8v1N+BwsjqH+8/5SEuN48GMLKJuSzT8+sZVH1u2PdCSRcUkFPczWVTaSGOeJuf7z/tKS4ln5iYVcOjuff31mBz94bo9Gv4iMMhX0MFtf1cT84iySE2Kr/3wgyQlx/Oyj53Hj+UX81wt7uXPVFtq6eiIdS2TcUEEPo+Pt3ew4Ejvjz4MRH+fhezeeyz9fM5s/bq/hxvvXcbi5PdKxRMYFFfQw2rTP338eS+PPg2FmLF8ynQdvX8ChpjY+8OM1bNrfFOlYIjEvmBWLHjSzOjPb3mfb183scL8FL6SfdVWNJMZ7mDc5K9JRImLp7Dye/uxFZKYkcMvP17Nqw0H1q4uEUTAt9IeBqwbYfq9zbl7g9sfQxooN66saOb84e1z0n5/OjLx0/vczF3HB9In889Nvcvevt9HR3RvpWCIxadCC7px7BdDfy0PU3NbFzpoT46r//HQmpCbw0McW8LllM3iyvJoP3v8ah5raIh1LJOaM5ErRO83sNqAc+KJz7thAO5nZcmA5QHFx8QjebmxZX9WEc3DhjNgp6Ks2HBzR8ZMmpHDb4ik8ufkQV9z7Ch8um0zppAxuWTR+Phci4TTck6L3A9OBeUAN8J+n29E5t8I5V+acK/N6vcN8u7FnXWUDKQlxzC0an/3npzO7IJPPXjKDrNQEfrluPy+8VYvPp351kVAYVkF3ztU653qdcz7g58DC0MYa+9ZWNrJwag6J8RpI1F9uehJ/t2Q68yZn8cKuOu5YuYnjbVosQ2SkhlVtzKygz8MbgO2n23c8qjvRQUVdKxeOs+GKQ5EY7+HG84u4bt4ZrKlo4AP3raGyvjXSsUTGtGCGLT4GrANKzazazO4Avmtmb5rZNmAp8E9hzjmmrKtqBODC6RMjnCS6mRmLpuby+PILaO3o4Yb71vJaRUOkY4mMWYOeFHXO/e0Amx8IQ5aY8VpFIxNSEphzRmako4wJu4+28ImLprJy3X4++sAGrptXyIKSkc9OqZOtMt6ogzcM1lY2sHhaDnEei3SUMSM7LZFPXzydGXnpPL3lMM++WYNPFyGJDIkKeogdamqj+li7uluGITkhjlsXl7B4Wi6vVjTw+MaD9Pi0CLVIsFTQQ+y1Sn8f8EUxNP58NMV5jA/MPYNrzp7E9iMneHT9Abp6VNRFgqGCHmJrKxrxZiQx3Zse6Shj2ntmevmb+YXsrW3lodf2aboAkSCooIeQc47XKhu5cHouZuo/H6mykhxuXlhMdVM7v3i1itZOza0u8m5U0EOooq6VhtZOLlL/ecicUziBWy+YQn1rJyteqeR4uy5AEjkdFfQQeq3SP/58vM1/Hm6z8jP4+IVTaeno4YE1VbR0qKiLDEQFPYTWVjQwOSeFyTmpkY4Sc0ompvGxC0s40d7DA2v2qftFZAAq6CHS63Osr2pUd0sYTclN47YLptB0souH1u7TeqUi/aigh8jOIyc40dGj7pYwm+ZN59bFU6hr6eShtfs1+kWkDxX0EFkbGH+ugh5+M/Mz+MjCYo4e7+Dh1/ZrnLpIgAp6iLxW2cis/HTyMpIjHWVcmF2QyU0LJnOoqY1VGw/QqznVRVTQQ6Gju5eN+xp1uf8oO7twAjfML2RPbSu/fr1ac7/IuDeSJegkYOO+Jjq6fVxcOn5WZIoWZSU5tHT28NzOWjKS4rn6nILBDxKJUSroIfDynnoS4z0snqr+80i4ZJaXlo4eXq1oID05nvfO1C9WGZ+CWeDiQTOrM7PtfbblmNlzZrY38DU7vDGj2+rddSyelktKYlyko4xLZsa15xZwTuEEnt1+lC0HB1yvXCTmBdOH/jBwVb9tXwFecM7NBF4IPB6XDjW1UVl/kotnqVUYSR4zPnR+EdO9afz69Wr21rZEOpLIqBu0oDvnXgGa+m2+DlgZuL8SuD7EucaMV/bWA6igR4H4OA8fWTSFvIxkVm08yM4jJyIdSWRUDXeUS75zrgYg8DXvdDua2XIzKzez8vr6+mG+XfR6eXc9hVkpTPemRTqK4F8k4/YLS0hOiOPjD2/kSHN7pCOJjJqwD1t0zq1wzpU558q83thqxXb1+Fhb0cDFpV5NlxtFJqQkcPsFJbR19vKxhzZqhkYZN4Zb0GvNrAAg8LUudJHGjvIDTZzs6mWJRlVEnUkTkvnvW89nX8NJ/u6Rcjp7NEWAxL7hFvTfArcH7t8OPBOaOGPLcztrSYz38N6ZuqAoGl04YyLfu3Eu66ua+PJT2/DpalKJcYOOQzezx4BLgIlmVg38G/Bt4EkzuwM4CHwonCGjkXOO53fVctH0XNKSNJw/Wl0/v5DDze1870+7OSMrhbuvmh3pSCJhM2glcs797WmeujTEWcaU3bUtHGpq5+8vnhHpKDKIz1wyncPN7dy/upLCrBQ+unhKpCOJhIWalsP03I5aAC4787QDfCRKmBnf/MBZ1B7v4GvPbGdSZjKXzcmPdCyRkNPkXMP03K5a5k3OIi9TsyuOBfFxHn58y3zOLpzAnY+9ztZDzZGOJBJyKujDcPR4B9uqj3O5WnljSmpiPA/cvgBvRhJ3PLyJA40nIx1JJKRU0Ifh+V3+7pYrVNDHHG9GEg9/fCG9zvGxhzbRdLIr0pFEQkYFfRj+tOMoJbmpzMhLj3QUGYbp3nR+cVsZh5vb+eTKTVrGTmKGCvoQNbR2sraigWvPPUNXh45hZSU5/OimeWw51MznHttCT6+WsZOxTwV9iJ59swafg/fPPSPSUWSErj6ngK9dO4c/76zlLl14JDFAwxaH6Hdv1DAzL53SSRmRjiIh8PGLpnKys4fv/3kPyQlx/McNZ+svLxmzVNCHoOZ4O5sONPFPl82KdBQJoTuXzaStq5efrq4kJSGOf732TBV1GZNU0IfgD9tqcA6uPVfrVsaau64spb27lwfX7iM1MY4vXVka6UgiQ6aCPgS/21bD2YWZTPNqdEusMTO+du0cOrp7+clLFSTGe/jcpTMjHUtkSFTQg1RZ38obh5q552pN7hSrzIxvXX8OnT0+fvDcHjq6e7nrylJ1v8iYoYIepCc3HSLeY9xwXmGko0iQVm04OKzjzivOprqpnZ+urmTLwWbed24Bnn5F/ZZFxaGIKBJSKuhB6Orx8evXq7n0zDzyMjR3S6zzmHHdvDNIjPewpqKB1s4ebjy/iIQ4jfKV6KaCHoQXdtXS0NrFzQvUKhsvzIyrz55ERnI8z24/SktHNx9dPIXURP3ISPQaUZPDzPab2ZtmttXMykMVKto8vukQkzKTWTJLS82NJ2bGe2d6uWnBZA4d83fBHD3REelYIqcVir8hlzrn5jnnykLwWlHncHM7r+yt58NlRcR5dHJsPJpblMUn3zOV7h4fP1tdyfbDxyMdSWRA6hQcxKoNBwD4UNnkCCeRSJqSm8Znl84gPzOJVRsP8q//u12TeknUGWlBd8CfzWyzmS0PRaBocrKzh0fXH+SKOflMzkmNdByJsMyUBD61ZBrvmTGRR9Yf4LqfrFVrXaLKSAv6Rc6584Crgc+a2ZL+O5jZcjMrN7Py+vr6Eb7d6Hqy/BDH27tZvmR6pKNIlIj3eLjmnAIe/vgCGk92cd19a/nen95Sa12iwogKunPuSOBrHfA0sHCAfVY458qcc2Ve79g5qdjT6+OBNfsom5LN+VOyIx1HoswlpXk8/4Ul3DC/kPtequSqH77C8ztrcU4zNkrkDLugm1mamWWcug9cAWwPVbBIe3b7UaqPtbN8ybRIR5EolZWayPc/NJdH71hEfJyHT/6ynNse3Kj1SiViRjKoNh94OnBZdDywyjn3fyFJFWE+n+P+1ZVMm5jGZWdqmTl5p/5Xod5+QQnrqxp5aXcd19+3lln56SybnU/xEM+96ApUGYlhF3TnXBUwN4RZosbvth1hZ80JfvDhuXg0VFGCEOcxLpoxkbIp2ayvauTVigZ+9nIlM/LSWVqaR0luquaEkbDTZW/9dPX4+P6fd3NmQSbXz9O8LTI0SQlxXFyax+LpuWyoauLVvfX8/NUqCiYks3haLnOLskiM12hhCQ8V9H5+teEAh5raWfmJc9Q6l2FLio9jySwvi6flsvVQM+urGnl6y2Ge3V5D2ZQcFk3NITc9KdIxJcaooPdxoqObH79YwYXTc1kyc2Kk40gMSIz3sHBqDgtKstnf2Mb6qkZeq2xgTUUDM7zpLJiaw5kFGcR71GqXkVNB7+Pbz75Fc1sX91ytJcgktMyMqRPTmDoxjRPt3ZQfOEb5/iYe23iQ9KR4zp+SzYKSnEjHlDFOBT3gtYoGVm04yPIl0zinaEKk40gMy0xJYNnsPC4p9bK3toWN+5p4ZU89L++pZ8O+Rj6yqJhLz8zXdL0yZCroQFtXD3f/ZhtTJ6bxhcu1ALSMDo8ZpZMyKZ2UyfH2bsr3N7Gz5gSffvR18jKS+HDZZG5eOJmibE07IcFRQQf+3+93caipnSf/7gKSE+IiHUfGoQkpCVx6Zj4rbitj9e46Vm04yE9XV3Df6gounuXlloXFLJudR7xa7fIuxn1B/9WGAzy28SCfvng6C6eqD1MiK85jXHpmPpeemc/h5nae2HSIJzYdZPkjm8nPTOKmssnctLCYwqyUSEeVKDSuC/rGfU382zM7uKTUy11XlkY6jshfKcxK4QuXz+Jzy2bw4lt1rNp4kB+/VMFPXqrgktI8/nZhMUtLvRFttQ933dZg6KrZoRu3BX330Rb+/tHNFOek8qOb52vxCola8XEerjhrElecNYnqY22BVvshPvXLcvIykvhQWRE3lRVTnKu+9vFuXBb0nUdO8NEHNhDvMX5xexkTUhIiHUkkKEXZqXzxilI+f+lMXnyrjsc3HeL+1ZXc91IlF83I5eYFxVxxVj5J8ToXNB6Nu4K+aX8Tn1xZTlpiHKs+tZiSiWmRjiQyZH1b7TXH2/mf8mqe2HSIf3hsC9mpCVx77hlcc04BC6fm6K/PcWTcFHSfz/HzV6v47p92Mzk7hUfuWKRViCQmFExI4XOXzuTOpTNYU9HAE5sO8T+bD/HI+gNMTE/kirMmcc3ZBSyYmh01LfeeXh9dvT56fI7eXkePz+FzjsQ4DwnxHpLiPTjndIHfEI2Lgl5Z38rXf7uDV/c2cPXZk/jOjeeSmaxuFoktHo+xZJaXJbO8nOzsYfXuev64vYanXz/Mqg0HSYr3ML84i0VTc1k0LYfzirPDMky3s7uX4+3dHO/o5kR7t/9+e0+f+920B7HC0zd+t4PMlAQmZSZTMCGZgqwUCjKTKc5NZUZeOtO96Rpm3I+N5gorZWVlrry8fNTer+5EB//9ShUrX9tPckIcX76qlFsXT4mK3/rhHB0g0ldXj4/C7BTWVTayYV8jO2tO4BzEe4xp3jRKJ2VSkptKYVYKBVkpZKcmMCEl4R2jZ3p7HcfbuznW1sWxti6a27pZvbveX6g7/IX6RHs3nT2+d2RIS4xjQkoCmSn+185ITiAp3kOcx4j3GPFxHjwG3b2Orp5eunp8zJqUwbG2Lo4e76AmcGs62fWX1zSD4pxUZualMyMvg5l56czM9xf6tKTYaqua2WbnXNlg+8XWvxr/n3Ib9zXxRPkh/rCthl7nuKlsMl+8ohRvhma3k/EnMd7D5XPyuXyOf7GW4+3dbD7QRPn+Y+ypbWHLwWP8YdsRfMNo2xmQkRxPZkoCeRlJzMhLZ0Ly24XbX7zjhzWNwUDDFju6eznQ2Mbeuhb21rZSUd9KRW0rL++pp7v37X9AYVYKs/LTmZWfwYy8t7/GWqHvb0T/OjO7CvgREAf8wjn37ZA4rKctAAAHVUlEQVSkGoLuXh8Vda28fvAYm/Y1sXpPPc1t3aQnxXPbBSXcdsEUnfgU6WNCSgLLZuezbPbbq3F19/o4eryD2hMdNLd109zeja9fhTfzH5udlkh2agJZqYk8++bRUT3pmpwQR+mkDEonZfzV9p5eHwea2thb6y/0e+ta2VPbwtqKRrp63/6LoTArhZn56ZTkplGUnUJRdipF2SlMzk4lMyU+Kv56H4lhF3QziwPuAy4HqoFNZvZb59zOUIU7ZffRFnbXttDQ0klDq/9W39LJwaY2DjS20RP44E1MT2RZaR5XnJXPklleUhNj+7exSKgkxHmYnJM65IEC0TKCJj7Ow3Svv7vlqrPf3t7T6+NgUxt761r9xb6ulT21rZTvP0ZrZ89fvUZivAdvehITM5LwpieRm5ZIRnI8aUnxf/malhRPRlI8qYlxJMR7iPdYoNvo7e6jOI/hc/4TvT29jh6fj16fo2RiWtjP3Y2k4i0EKgJL0WFmjwPXASEv6I+uP8Aj6w8A/n6/3PREJqYnMd2bzpVnTWJWfgbnFWczOSdlzP+GFZHQiY/zMM2bzrRArTjFOf/5gOpj7RxqaqP6WDv1rZ00tHRS39pJ9bE2tlU309rZQ1vX4Cdwg/HwxxdwSWleSF7rdEZS0AuBQ30eVwOL+u9kZsuB5YGHrWa2ewjvMRFo6L+xcggvEGED5h8jxnJ2UP6/8pFQvVDwRpw/Apn7CvnnZ+l3RnT4lGB2GklBH6gp/I7TKs65FcCKYb2BWXkwZ3aj1VjOP5azg/JHmvJHxkhm9akGJvd5XAQcGVkcEREZrpEU9E3ATDObamaJwM3Ab0MTS0REhmrYXS7OuR4zuxP4E/5hiw8653aELJnfsLpqoshYzj+Ws4PyR5ryR8CoXikqIiLho/WsRERihAq6iEiMiHhBN7McM3vOzPYGvmafZr/bA/vsNbPbA9tSzewPZvaWme0ws1GZesDMrjKz3WZWYWZfGeD5JDN7IvD8BjMr6fPcPYHtu83sytHIO0C+YeU3s8vNbLOZvRn4umy0swdyDPv7H3i+2MxazexLo5W53/uP5PNzrpmtC3ze3zSz5LGQ3cwSzGxlIPMuM7tnNHP3yTdY/iVm9rqZ9ZjZjf2ee0cNijrOuYjegO8CXwnc/wrwnQH2yQGqAl+zA/ezgVRgaWCfROBV4Oow543Df23TtMB7vgHM6bfPZ4CfBe7fDDwRuD8nsH8SMDXwOnGj/P0eSf75wBmB+2cDhyPweRl2/j7P/xr4H+BLYyk//kEM24C5gce5o/n5GWH2W4DHA/dTgf1ASRR+70uAc4FfAjf22T5gDRrtz89gt4i30PFPF7AycH8lcP0A+1wJPOeca3LOHQOeA65yzrU5514CcM51Aa/jHw8fTn+Z8iDwnqemPOir77/pKeBS889JcB3+D3Wnc24fUBF4vdE07PzOuS3OuVPXGuwAks1stKewHMn3HzO7Hv8PY6hHZAVrJPmvALY5594AcM41OudCc116cEaS3QFpZhYPpABdwInRif0Xg+Z3zu13zm0D+s8BPGANGo3QQxENBT3fOVcDEPg60GQHA00zUNh3BzPLAt4PvBCmnEFn6buPc64HOI6/NRXMseE2kvx9fRDY4pzrDFPO0xl2fjNLA+4GvjEKOU9nJN//WYAzsz8FugW+PAp5B8wVMJTsTwEngRrgIPB951xTuAOfLlvAUH7+ouFnd1CjMh2hmT0PTBrgqa8G+xIDbPvLeMvAb/3HgP9ygcnCwiiYKQ9Ot09Q0yWE2Ujy+580Owv4Dv4W42gbSf5vAPc651otcpO4jSR/PPAeYAHQBrxg/oUPwt2IGSxXMPssBHqBM/B3WbxqZs+Pws9rMNnCfeyoGZWC7py77HTPmVmtmRU452rMrACoG2C3auCSPo+LgNV9Hq8A9jrnfhiCuIMJZsqDU/tUB37ZTACagjw23EaSHzMrAp4GbnPORWKetJHkXwTcaGbfBbIAn5l1OOd+Ev7Y78h2ylA/Py875xoAzOyPwHmE/6/S/rlOGUr2W4D/c851A3VmthYow9/9NVpG8vM3WA2KDpHuxAe+x1+fFP3uAPvkAPvw/2bPDtzPCTz3LfwnuTyjlDce/4dwKm+fWDmr3z6f5a9PDD0ZuH8Wf31StIrRPyk6kvxZgf0/GMHPy7Dz99vn60TmpOhIvv/Z+M8TpQZe53ngfWMk+93AQ/hbumn4p9k+N9q+9332fZh3nhQdsAZF0y3yAfz9ay8AewNfTxXqMvyrIJ3a7xP4TyJWAB8PbCvC/2fPLmBr4PbJUch8DbAH/xnzrwa2fRP4QOB+Mv5RFBXARmBan2O/GjhuN2EekRPq/MC/4O8H3drnljdW8vd7ja8TgYIegs/PR/Gf0N3OAI2faM0OpAe278BfzO+K0u/9Avyt8ZNAI7Cjz7HvqEHRdtOl/yIiMSIaRrmIiEgIqKCLiMQIFXQRkRihgi4iEiNU0EVEYoQKuohIjFBBFxGJEf8fW3igqeTglWIAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.distplot([a for (a, b) in distances])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['chb07_12_0.npy',\n",
       " 'chb15_28_0.npy',\n",
       " 'chb03_34_0.npy',\n",
       " 'chb19_29_0.npy',\n",
       " 'chb07_13_0.npy',\n",
       " 'chb06_09_0.npy',\n",
       " 'chb12_10_1.npy',\n",
       " 'chb04_28_0.npy',\n",
       " 'chb20_13_0.npy',\n",
       " 'chb21_20_0.npy',\n",
       " 'chb10_31_0.npy',\n",
       " 'chb05_06_0.npy',\n",
       " 'chb12_38_3.npy',\n",
       " 'chb15_06_0.npy',\n",
       " 'chb10_20_0.npy',\n",
       " 'chb12_38_2.npy',\n",
       " 'chb15_49_0.npy',\n",
       " 'chb21_19_0.npy',\n",
       " 'chb24_03_0.npy',\n",
       " 'chb13_58_0.npy',\n",
       " 'chb13_55_0.npy',\n",
       " 'chb20_15_1.npy',\n",
       " 'chb10_27_0.npy',\n",
       " 'chb04_08_0.npy',\n",
       " 'chb18_35_0.npy',\n",
       " 'chb13_62_2.npy',\n",
       " 'chb10_38_0.npy',\n",
       " 'chb09_06_0.npy',\n",
       " 'chb12_42_1.npy',\n",
       " 'chb13_40_0.npy',\n",
       " 'chb15_22_0.npy',\n",
       " 'chb20_14_0.npy',\n",
       " 'chb03_02_0.npy',\n",
       " 'chb12_42_0.npy',\n",
       " 'chb12_23_1.npy',\n",
       " 'chb13_21_0.npy',\n",
       " 'chb01_03_0.npy',\n",
       " 'chb15_40_1.npy',\n",
       " 'chb09_08_0.npy',\n",
       " 'chb22_38_0.npy',\n",
       " 'chb14_17_0.npy',\n",
       " 'chb12_33_0.npy',\n",
       " 'chb01_15_0.npy',\n",
       " 'chb12_10_0.npy',\n",
       " 'chb05_17_0.npy',\n",
       " 'chb22_20_0.npy',\n",
       " 'chb04_05_0.npy',\n",
       " 'chb08_21_0.npy',\n",
       " 'chb13_40_1.npy',\n",
       " 'chb15_54_2.npy',\n",
       " 'chb15_54_1.npy',\n",
       " 'chb01_21_0.npy',\n",
       " 'chb23_09_2.npy',\n",
       " 'chb15_54_4.npy',\n",
       " 'chb12_42_4.npy',\n",
       " 'chb11_99_0.npy',\n",
       " 'chb24_04_0.npy',\n",
       " 'chb05_22_0.npy',\n",
       " 'chb21_21_0.npy',\n",
       " 'chb23_08_0.npy',\n",
       " 'chb13_59_0.npy',\n",
       " 'chb05_13_0.npy',\n",
       " 'chb01_16_0.npy',\n",
       " 'chb06_10_0.npy',\n",
       " 'chb08_02_0.npy',\n",
       " 'chb12_09_1.npy',\n",
       " 'chb21_22_0.npy',\n",
       " 'chb18_30_0.npy',\n",
       " 'chb16_16_0.npy',\n",
       " 'chb12_11_0.npy',\n",
       " 'chb12_23_0.npy',\n",
       " 'chb16_18_1.npy',\n",
       " 'chb03_36_0.npy',\n",
       " 'chb06_13_0.npy',\n",
       " 'chb06_01_1.npy',\n",
       " 'chb08_05_0.npy',\n",
       " 'chb03_04_0.npy',\n",
       " 'chb15_10_0.npy',\n",
       " 'chb06_01_2.npy',\n",
       " 'chb13_19_0.npy',\n",
       " 'chb14_18_0.npy',\n",
       " 'chb05_16_0.npy',\n",
       " 'chb15_46_0.npy',\n",
       " 'chb15_31_0.npy',\n",
       " 'chb16_17_0.npy',\n",
       " 'chb12_38_4.npy',\n",
       " 'chb15_17_0.npy',\n",
       " 'chb06_24_0.npy',\n",
       " 'chb15_40_2.npy',\n",
       " 'chb08_13_0.npy',\n",
       " 'chb19_28_0.npy',\n",
       " 'chb16_11_0.npy',\n",
       " 'chb16_17_2.npy',\n",
       " 'chb02_19_0.npy',\n",
       " 'chb16_18_0.npy',\n",
       " 'chb10_12_0.npy',\n",
       " 'chb07_19_0.npy',\n",
       " 'chb12_08_0.npy',\n",
       " 'chb18_29_0.npy',\n",
       " 'chb13_62_1.npy',\n",
       " 'chb02_16_0.npy',\n",
       " 'chb04_28_1.npy',\n",
       " 'chb10_89_0.npy',\n",
       " 'chb17a_04_0.npy',\n",
       " 'chb12_38_0.npy',\n",
       " 'chb23_09_3.npy',\n",
       " 'chb24_01_0.npy',\n",
       " 'chb16_17_3.npy',\n",
       " 'chb17a_03_0.npy',\n",
       " 'chb23_09_0.npy',\n",
       " 'chb15_62_0.npy',\n",
       " 'chb09_19_0.npy',\n",
       " 'chb14_04_0.npy',\n",
       " 'chb16_17_1.npy',\n",
       " 'chb03_01_0.npy',\n",
       " 'chb10_30_0.npy',\n",
       " 'chb01_26_0.npy',\n",
       " 'chb13_62_0.npy',\n",
       " 'chb12_36_0.npy',\n",
       " 'chb15_52_0.npy',\n",
       " 'chb22_25_0.npy',\n",
       " 'chb23_08_1.npy',\n",
       " 'chb23_06_0.npy',\n",
       " 'chb09_08_1.npy',\n",
       " 'chb24_04_1.npy',\n",
       " 'chb13_60_0.npy',\n",
       " 'chb15_54_0.npy',\n",
       " 'chb01_18_0.npy',\n",
       " 'chb20_16_0.npy',\n",
       " 'chb14_03_0.npy',\n",
       " 'chb16_10_0.npy',\n",
       " 'chb06_04_0.npy',\n",
       " 'chb20_68_0.npy',\n",
       " 'chb17b_63_0.npy',\n",
       " 'chb12_08_2.npy',\n",
       " 'chb14_04_1.npy',\n",
       " 'chb08_11_0.npy',\n",
       " 'chb12_33_1.npy',\n",
       " 'chb11_92_0.npy',\n",
       " 'chb01_04_0.npy',\n",
       " 'chb18_32_0.npy',\n",
       " 'chb15_40_0.npy',\n",
       " 'chb12_06_0.npy',\n",
       " 'chb12_23_2.npy',\n",
       " 'chb13_55_1.npy',\n",
       " 'chb06_01_0.npy',\n",
       " 'chb23_09_1.npy',\n",
       " 'chb12_08_3.npy',\n",
       " 'chb18_31_0.npy',\n",
       " 'chb12_06_1.npy',\n",
       " 'chb06_18_0.npy',\n",
       " 'chb20_12_0.npy',\n",
       " 'chb18_36_0.npy',\n",
       " 'chb20_15_0.npy',\n",
       " 'chb03_03_0.npy',\n",
       " 'chb20_13_1.npy',\n",
       " 'chb12_09_0.npy',\n",
       " 'chb14_11_0.npy',\n",
       " 'chb12_38_1.npy',\n",
       " 'chb02_16+_0.npy',\n",
       " 'chb19_30_0.npy',\n",
       " 'chb15_15_0.npy',\n",
       " 'chb15_54_3.npy',\n",
       " 'chb14_27_0.npy',\n",
       " 'chb14_06_0.npy',\n",
       " 'chb03_35_0.npy',\n",
       " 'chb12_08_1.npy',\n",
       " 'chb12_42_3.npy',\n",
       " 'chb11_82_0.npy',\n",
       " 'chb15_20_0.npy',\n",
       " 'chb06_04_1.npy',\n",
       " 'chb16_14_0.npy',\n",
       " 'chb12_42_2.npy']"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "min(distances)[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
